// authMiddleware.js

const jwt = require("jsonwebtoken");
const secretKey = 'my_secret_key';
const { client } = require("../config/redis");

exports.authenticateToken = async (req, res, next) => {
    const authHeader = req.headers.authorization;
    if (!authHeader) {
        return res.status(401).json({ message: '请提供有效的token' });
    }
    const parts = authHeader.split(' ');
    if (parts.length !== 2 || parts[0] !== 'Bearer') {
        return res.status(401).json({ message: 'Token格式错误' });
    }
    const token = parts[1];
    // console.log(token);//
    try {
        const decoded = jwt.verify(token, secretKey);
        const result = await client.get(token);   // 使用 await 等待异步结果
        if (!result) {
            return res.status(401).json({ message: 'Token无效或已过期' });
        }

        // 获取 token 的剩余时间
        // const ttl = await client.ttl(token);
        // console.log('Token剩余有效期（秒）:', ttl);

        await client.expire(token, 1800);  // 延长过期时间
        req.user = decoded;
        next();
    } catch (error) {
        return res.status(403).json({ message: 'Token无效' });
    }
}

exports.isAdmin = (req, res, next) => {
    // 注意顺序问题
    if (req.user && req.user.role === 'admin') {
        next();
    } else {
        res.status(400).json({ message: '需要管理员权限' });
    }
}
